package cn.yunhe.service.impl;

import cn.yunhe.mapper.ModulePMapper;
import cn.yunhe.mapper.RoleModulePMapper;
import cn.yunhe.mapper.RolePMapper;
import cn.yunhe.mapper.UserpMapper;
import cn.yunhe.pojo.*;
import cn.yunhe.service.RoleUserService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.UUID;
import java.util.stream.Collectors;

@Service("roleService")
public class RoleUserServiceImpl implements RoleUserService {

    @Autowired
    private RolePMapper rolePMapper;
    @Autowired
    private UserpMapper userpMapper;

    @Autowired
    private ModulePMapper modulePMapper;
    @Autowired
    private RoleModulePMapper roleModulePMapper;


    @Override
    public List<RoleP> findRoleAll() {
        return rolePMapper.findRoleAll();
    }

    @Override
    public List<RoleP> findRoleById(String id) {

        return null;
    }

    @Override
    public PageBean listDeptOfPage(PageBean pageBean) {

        int start = (pageBean.getCurPage() - 1) * pageBean.getPageSize();
        // 设置分页sql 条件
//        PageHelper.offsetPage(start, pageBean.getPageSize());
        PageHelper.startPage(pageBean.getCurPage(), pageBean.getPageSize());


        List<RoleP> rolePS = rolePMapper.listDeptAndParent();

        // 分页插件 类 PageInfo
        PageInfo<RoleP> pageInfo = new PageInfo<>(rolePS);

        pageBean.setDatas(pageInfo.getList());  // 分装分页数据
        pageBean.setTotalPages(pageInfo.getPages());  // 共多少页

        pageBean.setTotalRows(pageInfo.getTotal());


        return pageBean;
    }

    @Override
    public RoleP findUserById(String id) {


        return rolePMapper.findUserById(id);
    }

    @Override
    public int insertData(RoleP roleP) {
        String roleId = UUID.randomUUID().toString();
        roleP.setRoleId(roleId);

//        roleP.setCreateBy();
//        roleP.setCreateDept();
//        roleP.setUpdateBy();
        roleP.setCreateTime(new Date());
        roleP.setUpdateTime(new Date());


        return rolePMapper.insert(roleP);
    }

    @Override
    public int updateRoleP(RoleP roleP) {


        return rolePMapper.updateByPrimaryKeySelective(roleP);
    }

    @Override
    public List<TreeNode> listModuleOfTreeBeanByRoleId(String roleId) {

        List<TreeNode> treeNodes = modulePMapper.listModuleOfTreeNode();

        List<String> moduleIds = roleModulePMapper.listModuleIdOfByRoleId(roleId);

        List<TreeNode> collect = treeNodes.stream().map((treeNode) -> {
            if (moduleIds.contains(treeNode.getId())) {
                treeNode.setChecked(true);
            }
            return treeNode;
        }).collect(Collectors.toList());
        return collect;
    }

    @Override
    public GllsResult deleteById(String[] roleIds) {//思路：根据role_id 查询用户
        //删除role_id 开始判断 该role_id 下有没有用户使用该角色
        // 不能删除的角色 用户的信息
        ArrayList<String> roleNames = new ArrayList<>();
        for (int i = 0; i < roleIds.length; i++) {
            String roleId = roleIds[i];
            if (isHaveUser(roleId)) {
                RoleP roleN = rolePMapper.findUserById(roleId);
                roleNames.add(roleN.getName());
                continue;
            }
            rolePMapper.deleteByPrimaryKey(roleId);
        }
        if (roleNames.size() == 0) {
            return new GllsResult(200, null, "删除成功");
        }
        return new GllsResult(400, roleNames, "部分未删除成功");
    }

    private boolean isHaveUser(String roleId) {

        List<Userp> userpList = userpMapper.findRoleIDByUser(roleId);

//        if (user.get(0).equals("null")) {
//
//        }
        System.out.println(userpList.get(0));
        if (userpList.get(0) == null ) {
             return false;
        }
        return true;
    }


}
